When you have several move requests that were defined in a Batch, and you wish to complete just one of the batches, and not all the batches, you need to set individually the Move Request for that user with the -CompleteAfter parameter. Optionnally you can add the -SuspendWhenReady:$false as well as the -PreventCompletion:$false. These two parameters used to work to be able to complete a move request within a Batch, but recent changes in Exchange Online and Exchange 2016/2019 made them inefficient for just completing a batch. Now you need the -CompleteAfter parameter as well, knowing that this parameter alone enables a Move Request to be completed.


NOTE: after having changed the -CompleteAfter parameter, and/or the -SuspendWhenReadyToComplete:$False and/or the -PreventCompletion:$False, you need to force the Move Request to resume with the "Resume-MoveRequest" cmdlet.



Get-MoveRequest -Identity Early.Adopter.001@CanadaSam.ca| Set-MoveRequest -SuspendWhenReadyToComplete:$false -preventCompletion:$false -CompleteAfter 1


Can be simplified as,


Get-MoveRequest -Identity Early.Adopter.001@CanadaSam.ca| Set-MoveRequest -CompleteAfter 1



The Set-MoveRequest instruction must be followed by “Resume-MoveRequest” cmdlet:


Get-MoveRequest -Identity Early.Adopter.001@CanadaSam.ca | Resume-MoveRequest


Also note that the -CompleteAfter parameter needs a PowerShell’s “Date” format. Setting that CompleteAfter value to “1” means for PowerShell “1st January 0001” - you can test this by running the following command:


PS C:\> get-date 1 Monday, January 1, 0001 12:00:00 AM


Hence running Set-MoveRequest -CompleteAfter 1 will set the Move Request to complete after 1st January 0001, which is anytime (as we’re already in 2020 AD)

In summary, get the move request you want to complete from the Batch, set the completion after date Set-MoveRequest <e-mail address> -CompleteAfter 1 and then force-resume the move request Resume-MoveRequest <e-mail address> and voilà !